這篇介紹利用 .Net VS 2022 的專案範本建立 gRPC 的服務
專案的名稱設定為 MyGrpcServer,接著就會看到以下的內容
往裡面看會有一個 .proto
檔的範例跟結構描述
// proto 版本,現行都使用第三版
syntax = "proto3";
// 提供 c# 使用的 namespace
option csharp_namespace = "MyGrpcServer";
package greet;
// 定義服務的宣告名稱
service Greeter {
// 定義服務裡面的方法,Request/Response 物件
rpc SayHello (HelloRequest) returns (HelloReply);
}
// Message 格式,屬性使用駝峰式。在 c# 那邊會自動轉成大駝峰開始
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
以上就是一個簡易的 .Net gRPC 的專案範本,跟一個 .proto
檔宣告的範例
裡面可以看到三個東西要比較注意,假如沒有特殊的命名習慣。建議就參考範本的方式跟著命名,避免會有找不到或其他錯誤的發生。
// c# 編譯出來的 namespace 使用
option csharp_namespace = "MyGrpcServer";
// 若無上面的 option csharp_namespace, 會改用這個屬性當預設的 namespace
// 網路上查詢,在別的語言會使用到。
package greet;
// 實作的服務名稱
service Greeter {}
接著往 Services → GreeterService.cs 看裡面內容,以下解說一下
using Grpc.Core;
namespace MyGrpcServer.Services
{
// Greeter.GreeterBase 會跟著 service 宣告的名稱
public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
// request、response 物件會在 MyGrpcServer 這個 namespace 下
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
logger.LogInformation("The message is received from {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
}
以上就是 gRPC Server 端的實作